package main

import "fmt"

func main() {

	//map 的特点：
	//key是唯一的，
	//使用之前一定要make
	initMapDemo()
	fmt.Println("============================================")

	optMapDemo()

}

func initMapDemo() {
	//	map 练习
	//	方式1.定义一个map变量，若只声明，则没有分配空间，初始化之后才会分配空间
	var myMap map[int]string

	//	使用make初始化，分配空间
	myMap = make(map[int]string, 10)
	//	使用mapd put方法
	// key是无序的，不可重复的
	myMap[100] = "张三"
	myMap[101] = "李四"
	myMap[102] = "王五"
	myMap[103] = "赵六"
	fmt.Println(myMap)

	fmt.Println("----------------------------------------")

	//	方式2. 定义map初始化
	myMap2 := make(map[int]string)
	myMap2[1] = "zs"
	myMap2[2] = "ls"
	myMap2[3] = "ww"
	fmt.Println("myMap2", myMap2)

	//	 方式3  定义map初始化
	myMap3 := map[int]string{
		1: "ccc",
		2: "bbb",
		3: "aaa",
	}
	fmt.Println("myMap3", myMap3)
}

func optMapDemo() {
	//	方式2. 定义map初始化
	myMap2 := make(map[int]string)
	myMap2[1] = "zs"
	myMap2[2] = "ls"
	fmt.Println("myMap2", myMap2)
	//新增元素
	myMap2[3] = "ww"
	// 删除元素
	delete(myMap2, 2)
	fmt.Println("myMap2", myMap2)

	//获取长度
	fmt.Println("myMap2的长度====>", len(myMap2))

	//	 forrange遍历
	for i, s := range myMap2 {
		fmt.Printf("%v=%v \n", i, s)
	}
	fmt.Println("----------------------------------------------")

	for i := range myMap2 {
		fmt.Printf("%v=%v \n", i, myMap2[i])
	}

	fmt.Println("----------------------------------------------")

	//	定义map中的map
	myMap3 := make(map[string]map[int]string)

	myMap3["一"] = make(map[int]string)
	myMap3["一"][1] = "一号房间"
	myMap3["一"][2] = "一号房间"
	myMap3["一"][3] = "一号房间"
	myMap3["一"][4] = "一号房间"

	myMap3["二"] = make(map[int]string)
	myMap3["二"][1] = "一号房间"
	myMap3["二"][2] = "一号房间"
	myMap3["二"][3] = "一号房间"
	myMap3["二"][4] = "一号房间"

	myMap3["三"] = make(map[int]string)
	myMap3["三"][1] = "一号房间"
	myMap3["三"][2] = "一号房间"
	myMap3["三"][3] = "一号房间"
	myMap3["三"][4] = "一号房间"

	for group, map0 := range myMap3 {
		for i, s := range map0 {
			fmt.Printf("楼栋:%s栋,层数:%v,房间号:%s \n", group, i, s)
			//fmt.Println("----------------------------------------------", group, i, s)

		}
	}
}
